﻿//----------------------------------------------------------------
// Desc: FuelCore 预编译头文件
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2010-06-11
//
// Update Date : 
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
//----------------------------------------------------------------
#pragma once


//----------------------------------------------------------------
//
//----------------------------------------------------------------
#define FUEL_MODULE_CORE 1


//----------------------------------------------------------------
// 当前 Fuel4D 引擎版本号
//----------------------------------------------------------------
#define FUEL_VER_MAJOR 2            // 主版本号
#define FUEL_VER_MINOR 5            // 次版本号

#define FUEL_REGISTER_KEY   _FT("Fuel4D.2.5.0.0")


//----------------------------------------------------------------
// 1. 保证在所有其它头文件包含之前包含本引擎
// 2. 非MFC环境下必须是所有文件最前面包含
// 3. 在MFC环境下必须包含在 <afxwin.h> 和 <afxext.h> 之间
//----------------------------------------------------------------
#ifdef __AFX_H__
    #ifdef __AFXEXT_H__
    #error "包含 <afxext.h> 之前必须先包含此文件"
    #endif

    #ifdef __AFXCMN_H__
    #error "包含 <afxcmn.h> 之前必须先包含此文件"
    #endif

    #ifdef __AFXDISP_H__
    #error "包含 <afxdisp.h> 之前必须先包含此文件"
    #endif

    #ifdef __AFXDTCTL_H__
    #error "包含 <afxdtctl.h> 之前必须先包含此文件"
    #endif

#else
    #ifdef _INC_STDLIB
    #error "包含 <stdlib.h> 之前必须先包含此文件"
    #endif

    #ifdef _INC_STDIO
    #error "包含 <stdio> 之前必须先包含此文件"
    #endif

    #ifdef _IOSTREAM_
    #error "包含 <iostream> 之前必须先包含此文件"
    #endif

    #ifdef _WINDOWS_
    #error "包含 <windows.h> 之前必须先包含此文件"
    #endif

    #ifdef _INC_TCHAR
    #error "包含 <tchar.h> 之前必须先包含此文件"
    #endif

    #ifdef _WINSOCKAPI_
    #error "包含 <winsock> 之前必须先包含此文件"
    #endif

    #ifdef _WINSOCK2API_
    #error "包含 <winsock2> 之前必须先包含此文件"
    #endif
#endif

#ifdef JNI_H_
#error "包含 <jni.h> 之前必须先包含此文件"
#endif

#ifdef _PTHREAD_H_
#error "包含 <pthread.h> 之前必须先包含此文件"
#endif

#ifdef _UNISTD_H_
#error "包含 <unistd.h> 之前必须先包含此文件"
#endif

#ifdef _SYS_STAT_H_
#error "包含 <sys/stat.h> 之前必须先包含此文件"
#endif

#ifdef _STRING_
#error "包含 <string> 之前必须先包含此文件"
#endif

#ifdef _VECTOR_
#error "包含 <vector> 之前必须先包含此文件"
#endif

#ifdef _MAP_
#error "包含 <map> 之前必须先包含此文件"
#endif

#ifdef _LIST_
#error "包含 <list> 之前必须先包含此文件"
#endif

#ifdef _DEQUE_
#error "包含 <deque> 之前必须先包含此文件"
#endif

#ifdef _STACK_
#error "包含 <stack> 之前必须先包含此文件"
#endif


//----------------------------------------------------------------
// 基础类型符号定义
//----------------------------------------------------------------
#include "Core/FCoreTypes.h"


//----------------------------------------------------------------
// 与操作系统平台环境相关的定义
//----------------------------------------------------------------
#include "Core/FCoreEnv.h"


//----------------------------------------------------------------
// 交由 Fuel4D 内存池托管分配与释放
//----------------------------------------------------------------
#if FUEL_OS_WINDOWS
extern void* operator new(size_t size);
extern void* operator new[](size_t size);
extern void operator delete(void* p);
extern void operator delete[](void* p);
#else
#include <new>
extern void* operator new(size_t size) throw(std::bad_alloc);
extern void* operator new[](size_t size) throw(std::bad_alloc);
extern void operator delete(void* p) throw();
extern void operator delete[](void* p) throw();
#endif


//----------------------------------------------------------------
// C++标准头文件包含
//----------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include <signal.h>
#include <string.h>
#include <wchar.h>
#include <iostream>
#include <iosfwd>
#include <malloc.h>
#include <math.h>
#include <algorithm>
#include <vector>
#include <map>
#include <list>
#include <deque>
#include <stack>


//----------------------------------------------------------------
// Fuel4D 基础公共函数头文件包含，详细函数列表见各文件内部
//----------------------------------------------------------------
#include "Core/FCoreRTTI.h"         // 内存池及相关
#include "Core/FCoreDefine.h"       // 核心模块相关符号定义
#include "Core/FCoreTemplate.h"     // 基础模块功能
#include "Core/FBasic.h"            // 基础功能
#include "Core/IFFramework.h"       // 内存框架结构
#include "Core/FModule.h"           // 核心组件
#include "Core/IFDocument.h"        // 文档对象支持
#include "Core/FHelper.h"           // 辅助类
#include "Core/FSystem.h"			// 功能系统
